package main

import "fmt"

/*
							Go 语言指针
------------------------------------------------------------------------------------
Go 语言的取地址符是 &，放到一个变量前使用就会返回相应变量的内存地址。

以下实例演示了变量在内存中地址：
 var a int = 10

fmt.Printf("变量的地址: %x\n", &a  )
------------------------------------------------------------------------------------
什么是指针
一个指针变量指向了一个值的内存地址。

类似于变量和常量，在使用指针前你需要声明指针。指针声明格式如下：

var var_name *var-type
var-type 为指针类型，var_name 为指针变量名，* 号用于指定变量是作为一个指针。以下是有效的指针声明：

var ip *int        指向整型
var fp *float32    指向浮点型

------------------------------------------------------------------------------------
如何使用指针
指针使用流程：

定义指针变量。
为指针变量赋值。
访问指针变量中指向地址的值。
在指针类型前面加上 * 号（前缀）来获取指针所指向的内容
------------------------------------------------------------------------------------
Go 空指针
当一个指针被定义后没有分配到任何变量时，它的值为 nil。

nil 指针也称为空指针。

nil在概念上和其它语言的null、None、nil、NULL一样，都指代零值或空值。

一个指针变量通常缩写为 ptr。
*/

func main18() {
	var a int = 20
	var ip *int

	ip = &a
	fmt.Printf("a变量的地址: %x\n", &a)
	fmt.Printf("ip 变量储存的指针地址: %x\n", ip)
	/* 使用指针访问值 */
	fmt.Printf("*ip 变量的值: %d\n", *ip)

	var ptr *int

	fmt.Printf("ptr 的值为 : %x\n", ptr)
}
